자바스크립트와 서양철학
프로토타입
객체는 속성에 따라 분류되는 것이 아닌 가장 보편적인 프로토타입으로부터 유사성 정도에 따라 범주화됩니다.
객체의 프로토타입과의 유사성 정도는 상황, 맥락(context)에 따라 달라집니다.
즉, 객체가 어떤 프로토타입과 유사한지는 맥락에 따라 달라집니다.
따라서 객체의 유사성이 가장 가까운 프로토타입이 곧 객체가 가지는 "의미"라고 볼 수 있습니다.
어학적 범주(lexical scope)
코드를 메모리에 load하거나 함수를 실행할 때마다 생성되는 실행맥락(execution context) 내에서 동일한 어휘적 범주(lexical scope) 내의 변수나 함수의 선언부를 실행맥락의 최상단 부분으로 끌어올리는 현상을 호이스팅(hoisting)이라고 합니다.
특정 실행맥락에 있는 변수나 함수들도 프로토타입의 성질과 비슷하게 어떤 어학적 범주에 있느냐에 따라 의미가 달라집니다.
그럼 스크립트를 실행하는 JS 엔진 입장에서는 선언된 변수나 함수의 의미를 파악하기 위해서는 그 둘의 어학적 범주를 파악해야 하는데 이를 위해서 호이스팅을 수행합니다.
this
어떤 객체에 의해서 실행맥락이 생성된다면 이 실행맥락의 영향으로 의미가 달라지는 즉, 맥락을 받아들이는 객체(변수, 함수 등)가 있을 겁니다.
this
는 이 맥락을 생성한 객체를 가리키는 키워드로, 절대로 아무거나 가리키는 것이 아닙니다.